#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
问卷生成工具 - Excel模板生成器
生成符合系统格式的Excel模板文件
"""

import pandas as pd
import os
from pathlib import Path


class ExcelTemplateGenerator:
    """Excel模板生成器类"""
    
    def __init__(self):
        self.template_data = {
            'questionnaire_info': self._get_questionnaire_info_template(),
            'questions': self._get_questions_template(),
            'score_judge': self._get_score_judge_template(),
            'slice': self._get_slice_template(),
            'score_figure': self._get_score_figure_template(),
            'tf_options': self._get_tf_options_template()
        }
    
    def _get_questionnaire_info_template(self):
        """获取问卷基本信息模板"""
        return pd.DataFrame({
            'title': ['示例问卷'],
            'result_page': ['$back']
        })
    
    def _get_questions_template(self):
        """获取问题模板"""
        return pd.DataFrame({
            'id': [0, 1, 2, 3, 4],
            'number': [-1, 1, 2, 3, 4],
            'content': [
                '这是说明文字，用于解释问卷内容',
                '这是判断题：您是否同意这个说法？',
                '这是选择题：请选择您的年龄范围',
                '这是带图片的问题：请识别下图中的物品',
                '这是带前置条件的问题：如果上一题选择"是"，请回答此题'
            ],
            'type': ['plain', 'tf', 'choice', 'tf', 'tf'],
            'score_id': ['', 's1', 's1', 's1', 's2'],
            'scores': ['', '1,0', '0,1,0,1', '1,0', '1,0'],
            'options': ['', '', '18-30岁|31-45岁|46-60岁|60岁以上', '', ''],
            'tf_options': ['', '是,否', '', '是,否', '是,否'],
            'special': [
                '',
                '',
                '',
                'image:watch.jpg',
                ''
            ],
            'prerequisite': [
                '',
                '',
                '',
                '',
                '[{"type": "answer", "args": {"id": 2, "value": "T"}}]'
            ],
            'header': ['explain', '', '', '', '']
        })
    
    def _get_score_judge_template(self):
        """获取评分规则模板"""
        return pd.DataFrame({
            'id': ['s1', 's2'],
            'name': ['认知评估', '行为评估'],
            'threshold': [5, 3],
            'assessment': ['cognition', 'behavior'],
            'results': ['正常,异常', '良好,需要关注'],
            'icon_url': ['/static/questionnaire/icon/cognition.svg', '/static/questionnaire/icon/behavior.svg'],
            'intervals': ['', '']
        })
    
    def _get_slice_template(self):
        """获取切片模板"""
        return pd.DataFrame({
            'question_ids': ['0,1', '2,3', '4']
        })
    
    def _get_score_figure_template(self):
        """获取评分配置模板"""
        return pd.DataFrame({
            'max': [10],
            'reverse': [False]
        })
    
    def _get_tf_options_template(self):
        """获取TF选项模板"""
        return pd.DataFrame({
            'option': ['正确', '错误']
        })
    
    def generate_template(self, output_path: str = "questionnaire_template.xlsx"):
        """生成Excel模板文件"""
        try:
            with pd.ExcelWriter(output_path, engine='openpyxl') as writer:
                for sheet_name, df in self.template_data.items():
                    df.to_excel(writer, sheet_name=sheet_name, index=False)
            
            print(f"模板文件已生成: {output_path}")
            return output_path
        except Exception as e:
            raise Exception(f"生成模板失败: {str(e)}")
    
    def generate_sample_questionnaire(self, output_path: str = "sample_questionnaire.xlsx"):
        """生成示例问卷文件"""
        sample_data = {
            'questionnaire_info': pd.DataFrame({
                'title': ['认知功能评估问卷'],
                'result_page': ['$back']
            }),
            'questions': pd.DataFrame({
                'id': [0, 1, 2, 3, 4, 5],
                'number': [-1, 1, 2, 3, 4, 5],
                'content': [
                    '请仔细阅读以下问题，根据您的实际情况选择最符合的答案。',
                    '您能记住最近发生的事情吗？',
                    '您能独立完成日常购物吗？',
                    '您能独立使用交通工具吗？',
                    '您能独立管理自己的财务吗？',
                    '您能独立处理日常家务吗？'
                ],
                'type': ['plain', 'tf', 'tf', 'tf', 'tf', 'tf'],
                'score_id': ['', 's1', 's1', 's1', 's1', 's1'],
                'scores': ['', '1,0', '1,0', '1,0', '1,0', '1,0'],
                'options': ['', '', '', '', '', ''],
                'tf_options': ['', '是,否', '是,否', '是,否', '是,否', '是,否'],
                'special': ['', '', '', '', '', ''],
                'prerequisite': ['', '', '', '', '', ''],
                'header': ['explain', '', '', '', '', '']
            }),
            'score_judge': pd.DataFrame({
                'id': ['s1'],
                'name': ['认知功能评估'],
                'threshold': [3],
                'assessment': ['cognition'],
                'results': ['认知功能正常,认知功能异常'],
                'icon_url': ['/static/questionnaire/icon/cognition.svg'],
                'intervals': ['']
            }),
            'slice': pd.DataFrame({
                'question_ids': ['0', '1,2,3', '4,5']
            }),
            'score_figure': pd.DataFrame({
                'max': [5],
                'reverse': [False]
            }),
            'tf_options': pd.DataFrame({
                'option': ['是', '否']
            })
        }
        
        try:
            with pd.ExcelWriter(output_path, engine='openpyxl') as writer:
                for sheet_name, df in sample_data.items():
                    df.to_excel(writer, sheet_name=sheet_name, index=False)
            
            print(f"示例问卷文件已生成: {output_path}")
            return output_path
        except Exception as e:
            raise Exception(f"生成示例问卷失败: {str(e)}")


def main():
    """主函数"""
    generator = ExcelTemplateGenerator()
    
    # 生成模板文件
    template_path = generator.generate_template()
    
    # 生成示例问卷
    sample_path = generator.generate_sample_questionnaire()
    
    print("\n文件生成完成！")
    print(f"模板文件: {template_path}")
    print(f"示例问卷: {sample_path}")


if __name__ == "__main__":
    main()
